#pragma once

#include "Check.h"
#include <filesystem>
#include <memory>
#include <string>
#include <array>
#include <algorithm>
#include <cctype>
#include <regex>
#include <optional>

/**
 * @brief 从 .git/config 文件获取远程 URL
 *
 * @param dir 要查找的目录路径
 * @return std::string 远程 URL，失败返回空字符串
 */
std::string get_url(const std::filesystem::path &dir);

/**
 * 将字符串写入指定目录下的时间戳文件
 * 参数：
 * content - 要写入的内容
 * dir     - 实验目录
 * dir     - 目标目录（不存在则自动创建）
 * 返回值：成功返回true，失败返回false
 */
bool write_to_cast_lib(const std::string &content,
                       const std::filesystem::path &lab_dir,
                       const std::filesystem::path &dir);

/**
 * 获取目录下所有.cast文件的路径（返回std::filesystem::path向量）
 */
std::vector<std::filesystem::path> get_cast_file(const std::filesystem::path &directory);

/**
 * 生成对比库的函数
 * 传入一个只有cast文件的目录，和处理后文件放置的对比库目录
 */
void init(const std::filesystem::path &file_dir, const std::filesystem::path &cast_dir);
